/**
 * @author Sebastian
 * @version 2.0
 * @date 2024/8/21 9:38
 */
// 最短无序连续子数组
    // https://leetcode.cn/problems/shortest-unsorted-continuous-subarray/?envType=problem-list-v2&envId=2cktkvj
    // 从左往右遍历，遍历到i，max记录的是从0到i最大的数，如果第i个位置比max小，证明第i位置元素处在一个不正确的位置(因为它前面有个比它大的数)，记录下标high。
    // 从右往左遍历，遍历到i，min记录的是从末尾元素到i元素最小的数，如果第i位置元素比min大了，证明第i位置元素也处在一个不正确的位置(因为它后面有比它小的数)，记录下标low。
    // 计算两个不正确的位置low和high之间的距离
public class Solution581 {
    public int findUnsortedSubarray(int[] nums) {
        if (nums.length < 2) return 0;
        int max = nums[0];
        int high = 0;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] >= max) {
                max = nums[i];
            } else {
                high = i;
            }
        }
        int min = nums[nums.length - 1];
        int low = nums.length - 1;
        for (int i = nums.length - 2; i >= 0; i--) {
            if (nums[i] <= min) {
                min = nums[i];
            } else {
                low = i;
            }
        }
        return high >= low ? high - low + 1 : 0;
    }
}
